package com.ccp.dev.qbdms.util;

import com.ccp.dev.core.basic.util.ContextUtil;
import com.ccp.dev.core.util.*;
import com.ccp.dev.qbdms.config.SystemPropertiesConfig;
import com.ccp.dev.qbdms.consts.ZhiLiangConst;
import com.ccp.dev.qbdms.model.SysOrgDeploy;
import com.ccp.dev.qbdms.service.SysOrgDeployService;
import com.ccp.dev.system.model.SysOrg;
import com.ccp.dev.system.service.SysOrgService;
import org.apache.commons.lang3.StringUtils;

/**
 * 基础工具类
 */
public class BaseUtil {

    /**
     * 获取当前的系统等级
     * @return 系统等级
     */
    public static SystemLevel getCurrentSystemLevel(){
        int xtdj = getCurrentSystemNumberLevel();
        if(xtdj == 0){
            return SystemLevel.GROUPLEVEL;
        }else if(xtdj == 1){
            return SystemLevel.HOSPITALLEVEL;
        }else {
            return SystemLevel.PLANTLEVEL;
        }
    }

    /**
     * 获取指定单位的系统等级
     * @return 系统等级
     */
    public static SystemLevel getCurrentSystemLevel(String code){
        int xtdj = getCurrentSystemNumberLevel(code);
        if(xtdj == 0){
            return SystemLevel.GROUPLEVEL;
        }else if(xtdj == 1){
            return SystemLevel.HOSPITALLEVEL;
        }else {
            return SystemLevel.PLANTLEVEL;
        }
    }

    /**
     * 获取当前系统等级 number
     * @return 等级
     */
    public static int getCurrentSystemNumberLevel(){
        SystemPropertiesConfig systemPropertiesConfig = AppUtil.getBean(SystemPropertiesConfig.class);
        int xtdj = systemPropertiesConfig.getLevel();
        if(xtdj == -1){
            throw new IllegalArgumentException("系统等级不能为空！");
        }
        //系统等级 =  系统等级 + 当前单位在组织树中的等级
        xtdj = xtdj+getTenOrgCurrentLocation();

//        if(xtdj != 0 && xtdj != 1 &&xtdj != 2){
//            throw new IllegalArgumentException("非法的系统等级！");
//        }
//        return xtdj;
        return  2;
    }

    /**
     * 获取指定单位系统等级 number
     * @return 等级
     */
    public static int getCurrentSystemNumberLevel(String code){
        SystemPropertiesConfig systemPropertiesConfig = AppUtil.getBean(SystemPropertiesConfig.class);
        int xtdj = systemPropertiesConfig.getLevel();
        if(xtdj == -1){
            throw new IllegalArgumentException("系统等级不能为空！");
        }
        //系统等级 =  系统等级 + 当前单位在组织树中的等级
        xtdj = xtdj+getTenOrgCurrentLocation(code);

        if(xtdj != 0 && xtdj != 1 &&xtdj != 2){
            throw new IllegalArgumentException("非法的系统等级！");
        }
        return xtdj;
    }

    /**
     * 判断当前系统是否集团等级
     * @return 是 true 否 false
     */
    public static boolean isGroupLevel(){
        return getCurrentSystemLevel().equals(SystemLevel.GROUPLEVEL);
    }

    /**
     * 判断当前系统是否院级等级
     * @return 是 true 否 false
     */
    public static boolean isHospitalLevel(){
        return getCurrentSystemLevel().equals(SystemLevel.HOSPITALLEVEL);
    }

    /**
     * 判断当前系统是否厂所级等级
     * @return 是 true 否 false
     */
    public static boolean isPlantLevel(){
        return getCurrentSystemLevel().equals(SystemLevel.PLANTLEVEL);
    }

    /**
     * 获取当前单位在组织树中的位置
     * @return 位置
     */
    private static int getTenOrgCurrentLocation(){
        String codePath = getCurrentTenOrgCodePath();
        String[] pathArr = codePath.split("\\.");
        return pathArr.length-1;
    }

    /**
     * 获取指定单位在组织树中的位置
     * @return 位置
     */
    private static int getTenOrgCurrentLocation(String code){
        String codePath = BaseUtil.getCurrentTenOrgCodePath(code);
        String[] pathArr = codePath.split("\\.");
        return pathArr.length-1;
    }

    /**
     * 获取上级租户codePath 调用接口时用的到
     *
     * @return String
     */
    public static String getParentTenOrgCodePath(String code) {
        String paths = getCurrentTenOrgCodePath(code);
        int index = StringUtils.lastOrdinalIndexOf(paths, ".", 2);
        if (index == -1) {
            paths = "";
        } else {
            paths = paths.substring(0, index + 1);
        }
        return paths;
    }

    /**
     * 获取所传入租户codePath （传入下级 返回下级的 paths）
     *
     * @return String
     */
    public static String getTenOrgCodePath(String code) {
        String paths = getCurrentTenOrgCodePath(code);
        return paths;
    }

    /**
     * 获取当前组织Code
     */
    public static String getCurrentOrgCode() {
        SysOrg sysOrg = (SysOrg) ContextUtil.getCurrentOrg();
        return  sysOrg.getCode();
    }



    /**
     * 获取当前系统上级是租户的组织codePath
     *
     * @return String
     */
    public static String getCurrentTenOrgCodePath() {
        SysOrg sysOrg = (SysOrg) ContextUtil.getCurrentOrg();
        return BaseUtil.getCurrentTenOrgCodePath(sysOrg.getCode());
    }


    /**
     * 根据code获取上级是租户的组织codePath
     *
     * @return String
     */
    public static String getCurrentTenOrgCodePath(String code) {
        SysOrgService sysOrgService = AppUtil.getBean(SysOrgService.class);
        SysOrg sysOrg = sysOrgService.getSysOrgByOrgCode(code);
        if (StringUtil.isEmpty(code) || BeanUtils.isEmpty(sysOrg)) {
            return "";
        }
        String paths = sysOrg.getPath();
        String[] pathArr = paths.split("\\.");
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 1; i < pathArr.length; i++) {
            SysOrg currOrg = sysOrgService.getOneById(pathArr[i]);
//            if (currOrg.getIsTenant() == SysOrg.IS_TENANT_Y) {
                stringBuilder.append(currOrg.getCode()).append(StringPool.DOT);
//            }
        }
        return stringBuilder.toString();
    }

    /**
     * 系统等级枚举
     */
    public enum SystemLevel{
        /**
         * 集团级
         */
        GROUPLEVEL,
        /**
         * 院级
         */
        HOSPITALLEVEL,
        /**
         * 厂所级
         */
        PLANTLEVEL;
    }

}
